package com.nine.pattern.singleton.demo2;

/**
 * @author nine
 * @version 1.0
 * @description 懒汉式：线程安全，双重校验锁
 * @date 2024-06-26 22:13
 */
public class Singleton05 {

	private Singleton05() {
	}

	// 多线程情况下，会出现空指针问题【JVM 指令重排序问题】
	private static volatile Singleton05 instance;

	public static Singleton05 getInstance() {
		// 第一次判断，如果instance不为null，不进入synchronized代码块
		if (instance == null) {
			synchronized (Singleton05.class) {
				// 第二次判断
				if (instance == null) {
					instance = new Singleton05();
				}
			}
		}
		return instance;
	}
}
